package com.qtrue.thread;

/*
*
*   例子：创建三个窗口卖票，总票数为100张。（使用继承于Thread类的方式实现）
*
*   存在线程安全问题，待解决。
*/
public class WindowTest01 {
    public static void main(String[] args) {
        // 创建3个window对象，用来启动三个线程
        Window window01 = new Window();
        Window window02 = new Window();
        Window window03 = new Window();

        // 设置线程名称
        window01.setName("窗口一：");
        window02.setName("窗口二：");
        window03.setName("窗口三：");

        // 启动线程
        window01.start();
        window02.start();
        window03.start();
    }
}

class Window extends Thread {
    // 总票数
    /*
        使用static修饰：
            1. 编译时由内存分配一块空间，直到程序停止运行才会释放。所有对象共享这块内存；
            2. 无论哪一个方法修改了此变量，此变量都会改变；
            3. 该类的所有对象都会共享这块内存空间。
    */
    private static int ticket = 100;

    @Override
    public void run() {
        while (true) {
            if(ticket > 0){
                System.out.println(Thread.currentThread().getName() + "：卖票，票号为：" + ticket);
                ticket--;
            }else {
                break;
            }
        }
    }
}
